#!/bin/bash
 source "sKitty.sh"
 HEAD(){ for (( a=2; a<=41; a++ ))
  do
 TPUT $a 1
        $E "\033[1;35m\xE2\x94\x82                                                                                \xE2\x94\x82\033[0m";
  done
 TPUT 3 3
        $E "\033[1;36m*** kitty ***\033[90m Эмулятор терминала для художников\033[0m";
 TPUT 4 1
        $E "$d";
 TPUT 11 1
        $E "\e[0m\033[35m+--- \e[90mOпции отладки \e[0m\033[35m------------------------------- \033[1;36mDebugging options \e[0m\033[35m------------+\033[0m";
 TPUT 20 1
        $E "\e[0m\033[35m+--- \e[90mOпции         \e[0m\033[35m------------------------------- \033[1;36mOptions           \e[0m\033[35m------------+\033[0m";
 TPUT 39 1
        $E "\e[0m\033[35m+--- Up \xE2\x86\x91 \xE2\x86\x93 Down Select Enter ---------------------------------------------------+\033[0m";
 MARK;TPUT 1 1
        $E "$c";UNMARK;}
   i=0; CLEAR; CIVIS;NULL=/dev/null
# 32 это расстояние сверху и 48 это расстояние слева
   FOOT(){ MARK;TPUT 42 1
        $E "$c";UNMARK;}
# это управляет кнопками ввер/хвниз
 i=0; CLEAR; CIVIS;NULL=/dev/null
#
  M0(){ TPUT  5 3; $e " Установка                                     \033[32minstall                       \033[0m";}
  M1(){ TPUT  6 3; $e " Oбзор                                         \033[32mSynopsis                      \033[0m";}
  M2(){ TPUT  7 3; $e " Описание                                      \033[32mDescription                   \033[0m";}
  M3(){ TPUT  8 3; $e " Подробнaя документация                                                      ";}
  M4(){ TPUT  9 3; $e " Автор и копирайт                              \033[32mAuthor end copyright          \033[0m";}
  M5(){ TPUT 10 3; $e " Горячие клавиши                               \033[32mHotkeys                       \033[0m";}
#
  M6(){ TPUT 12 3; $e " Текущая версия                                \033[32m-v --version                  \033[0m";}
  M7(){ TPUT 13 3; $e " Вывод команд от дочернего процесса, на stdout \033[32m   --dump-commands            \033[0m";}
  M8(){ TPUT 14 3; $e " Воспроизвести ранее сброшенные команды        \033[32m   --replay-commands          \033[0m";}
  M9(){ TPUT 15 3; $e " Путь к файлу, от дочернего процесса           \033[32m   --dump-bytes               \033[0m";}
 M10(){ TPUT 16 3; $e " Отладка команд рендеринга                     \033[32m --debug-gl --debug-rendering \033[0m";}
 M11(){ TPUT 17 3; $e " Pаспечатывать ключевые события                \033[32m   --debug-keyboard           \033[0m";}
 M12(){ TPUT 18 3; $e " Информация о запасных шрифтах для символов    \033[32m   --debug-font-fallback      \033[0m";}
 M13(){ TPUT 19 3; $e " Информация о системе и конфигурации           \033[32m   --debug-config             \033[0m";}
#
 M14(){ TPUT 21 3; $e " Установите часть класса свойства окна         \033[32m   --class                    \033[0m";}
 M15(){ TPUT 22 3; $e " Установите часть имени свойства WM_CLASS      \033[32m   --name                     \033[0m";}
 M16(){ TPUT 23 3; $e " Установите заголовок окна                     \033[32m-T --title                    \033[0m";}
 M17(){ TPUT 24 3; $e " Укажите путь к файлам конфигурации            \033[32m-c --config                   \033[0m";}
 M18(){ TPUT 25 3; $e " Переопределить отдельные параметры конфига    \033[32m-o --override                 \033[0m";}
 M19(){ TPUT 26 3; $e " Перейти в каталог при запуске по умолчанию    \033[32m-d --directory                \033[0m";}
 M20(){ TPUT 27 3; $e " Отсоедините от управляющего терминала         \033[32m   --detach                   \033[0m";}
 M21(){ TPUT 28 3; $e " Путь к файлу, содержащему сеанс запуска       \033[32m   --session                  \033[0m";}
 M22(){ TPUT 29 3; $e " Путь к файлу Python                           \033[32m-w --watcher                  \033[0m";}
 M23(){ TPUT 30 3; $e " Быть открытым по завершении дочернего процесса\033[32m   --hold                     \033[0m";}
 M24(){ TPUT 31 3; $e " Будет запущен только один экземпляр           \033[32m-1 --single-instance          \033[0m";}
 M25(){ TPUT 32 3; $e " Cозданию новых окон в первом экземпляре       \033[32m   --instance-group           \033[0m";}
 M26(){ TPUT 33 3; $e " Hе закроется, пока не закрыто окно  \033[32m--wait-for-single-instance-window-close \033[0m";}
 M27(){ TPUT 34 3; $e " Cлушать контрольные сообщения                 \033[32m   --listen-on                \033[0m";}
 M28(){ TPUT 35 3; $e " Контролируйте, как создается начальное окно   \033[32m   --start-as                 \033[0m";}
 M29(){ TPUT 36 3; $e " Фреймворк                                     \033[32m+kitten                       \033[0m";}
 M30(){ TPUT 37 3; $e " \033[90mКонфигурации                                    \033[36mConfigurations              \033[0m";}
 M31(){ TPUT 38 3; $e " \033[32mGrannik Git                                                                 \033[0m";}
#
 M32(){ TPUT 40 3; $e " \033[90mExit                                                                        \033[0m";}
LM=32
   MENU(){ for each in $(seq 0 $LM);do M${each};done;}
    POS(){ if [[ $cur == up ]];then ((i--));fi
           if [[ $cur == dn ]];then ((i++));fi
           if [[ $i -lt 0   ]];then i=$LM;fi
           if [[ $i -gt $LM ]];then i=0;fi;}
REFRESH(){ after=$((i+1)); before=$((i-1))
           if [[ $before -lt 0  ]];then before=$LM;fi
           if [[ $after -gt $LM ]];then after=0;fi
           if [[ $j -lt $i      ]];then UNMARK;M$before;else UNMARK;M$after;fi
           if [[ $after -eq 0 ]] || [ $before -eq $LM ];then
           UNMARK; M$before; M$after;fi;j=$i;UNMARK;M$before;M$after;}
   INIT(){ R;HEAD;FOOT;MENU;}
     SC(){ REFRESH;MARK;$S;$b;cur=`ARROW`;}
# Функция возвращения в меню
     ES(){ MARK;$e " ENTER = main menu ";$b;read;INIT;};INIT
  while [[ "$O" != " " ]]; do case $i in
  0) S=M0;SC;if [[ $cur == enter ]];then R;echo -e "
 Чтобы включить репозиторий программного обеспечения Ubuntu «Universe»,
 воспользуйтесь следующими add-apt-репозиторий команда.
\e[32m sudo add-apt-repository universe\e[0m
После добавления нового репозитория в вашу систему выполните команду:
\e[32m sudo apt update\e[0m
 Метод 1. Вы можете установить исходный код, а также использовать официальный
 репозиторий Ubuntu:
\e[32m sudo apt install kitty -y\e[0m
#
\e[32m sudo apt-get install kitty\e[0m
#
 Метод 2. из готовых бинарных файлов:
\e[32m curl -L https://sw.kovidgoyal.net/kitty/installer.sh | sh /dev/stdin\e[0m
 Система установит бинарник в каталог:
\e[32m ~/.local/kitty.app/bin/\e[0m
 Вы можете просто запустить его, набрав:
\e[32m ~/.local/kitty.app/bin/kitty\e[0m
#
 Метод 3.
 Еще один удобный способ установить Kitty – скомпилировать его из исходников.
 Однако потребуются некоторые зависимости, и прежде чем продолжить, убедитесь,
 что у вас есть следующее:
  • python 3.5 или новее
  • harfbuzz 1.5.0 или новее
  • zlib
  • libpng
  • liblcms2
  • gcc
 Исходный код размещен на Github, поэтому клонируйте репозиторий Git, как
 показано далее:
\e[32m git clone https://github.com/kovidgoyal/kitty\e[0m
 После загрузки перейдите в каталог и выполните следующие команды:
\e[32m cd kitty\e[0m
 Затем вызовите:
\e[32m make\e[0m
 После установки вы можете запустить его, вызвав команду:
\e[32m ./kitty/launcher/kitty\e[0m
";ES;fi;;
  1) S=M1;SC;if [[ $cur == enter ]];then R;echo -e "\e[32m kitty [options] [program-to-run ...]\e[0m";ES;fi;;
  2) S=M2;SC;if [[ $cur == enter ]];then R;echo -e " Запустите эмулятор терминала: \e[32mkitty\e[0m
 Kitty — это программируемый эмулятор терминала на основе OpenGL.
 Kitty написан на смеси языков программирования C и Python.
 Kitty поддерживает мозаичный режим (тайлинг), TrueColor, лигатуры
 и расширения для работы с клавиатурой и рендеринга изображений.
 kitty — это бесплатный эмулятор терминала с ускорением графического процессора
 с открытым исходным кодом для Linux и macOS,
 ориентированный на производительность и функции.
 Kitty – это кроссплатформенный и многофункциональный эмулятор терминала
 на базе графического процессора, разработанный по лицензии GPL 3.0.
 Он поддерживает графику, изображения, Unicode, истинный цвет, протокол мыши,
 гиперссылки, несколько буферов копирования/вставки и т. д.
 Это легкий эмулятор, которым можно управлять из скриптов,
 приглашения оболочки и через SSH.
 Подобно tilix, kitty представляет собой многофункциональный эмулятор терминала.";ES;fi;;
  3) S=M3;SC;if [[ $cur == enter ]];then R;echo " https://sw.kovidgoyal.net/kitty/";ES;fi;;
  4) S=M4;SC;if [[ $cur == enter ]];then R;echo " Kovid Goyal (Ковид Гоял) 2020, Kovid Goyal";ES;fi;;
#
  5) S=M5;SC;if [[ $cur == enter ]];then R;echo -e "
 Управление осуществляется с помощью сочетаний клавиш, начинающихся с:
 \e[32mctrl+shift\e[0m
            a
            b
            c
            d
            e
            f
            g
            h
            i
            j
            k
\e[32m ctrl+shift+l        \e[0m Новое окно (разделив по вертикали)
            m
\e[32m ctrl+shift+n        \e[0m Вообще новое окно, сновой разкладкой
            o
            p
\e[31m            q\e[0m         Должно быть закрытие окна, но зарезервирована xbindkeys
            r
            s
\e[32m ctrl+shift+t        \e[0m Новая вкладка
            u
            v
\e[32m ctrl+shift+w        \e[0m Закрыть окно
            x
            y
            z
\e[32m ctrl+shift+page_up  \e[0m Прокрутить страницу вверх
\e[32m ctrl+shift+page_down\e[0m Прокрутить страницу вниз
\e[32m ctrl+shiftt+enter   \e[0m Новое окно (разделив по горизонтали)
\e[32m ctrl+shift+right    \e[0m Следующая вкладка
\e[32m ctrl+shift+left     \e[0m Предидущая вкладка
\e[32m ctrl+shift+]        \e[0m Следующее окно
\e[32m ctrl+shift+[        \e[0m Предидущее окно
";ES;fi;;
#
  6) S=M6;SC;if [[ $cur == enter ]];then R;echo -e "\e[32m kitty -v\e[0m
\e[32m kitty --version\e[0m";ES;fi;;
  7) S=M7;SC;if [[ $cur == enter ]];then R;echo " Вывод команд, полученных от дочернего процесса, на стандартный вывод.";ES;fi;;
  8) S=M8;SC;if [[ $cur == enter ]];then R;echo " Воспроизвести ранее сброшенные команды.
 Укажите путь к файлу дампа, ранее созданному командой --dump-commands.
 Вы можете открыть новое окно kitty, чтобы воспроизвести команды с:
 kitty sh -c \"kitty --replay-commands /path/to/dump/file; read\"";ES;fi;;
  9) S=M9;SC;if [[ $cur == enter ]];then R;echo " Путь к файлу, в котором будут храниться необработанные байты,
 полученные от дочернего процесса";ES;fi;;
 10) S=M10;SC;if [[ $cur == enter ]];then R;echo " Отладка команд рендеринга.
 Это приведет к тому, что все вызовы OpenGL будут проверять наличие ошибок,
 а не игнорировать их.
 Также выводит различную отладочную информацию образование.
 Полезно при отладке проблем с рендерингом";ES;fi;;
 11) S=M11;SC;if [[ $cur == enter ]];then R;echo " Эта опция заставит kitty распечатывать ключевые события
 по мере их получения.";ES;fi;;
 12) S=M12;SC;if [[ $cur == enter ]];then R;echo " Распечатайте информацию о выборе запасных шрифтов для символов,
 отсутствующих в основном шрифте.";ES;fi;;
 13) S=M13;SC;if [[ $cur == enter ]];then R;echo "Распечатайте информацию о системе и конфигурации kitty";ES;fi;;
#
 14) S=M14;SC;if [[ $cur == enter ]];then R;echo " --class <CLS>
 Установите часть класса свойства окна WM_CLASS.
 На Wayland он устанавливает идентификатор приложения. По умолчанию: kitty";ES;fi;;
 15) S=M15;SC;if [[ $cur == enter ]];then R;echo " --name <NAME>
 Установите часть имени свойства WM_CLASS
 (по умолчанию используется значение из kitty --class)";ES;fi;;
 16) S=M16;SC;if [[ $cur == enter ]];then R;echo " -T <TITLE> --title <TITLE> Установите заголовок окна.
 Это переопределит любой заголовок, установленный программой,
 работающей внутри kitty. Так что используйте это только в том случае,
 если вы запускаете программу, которая делает не устанавливайте заголовки.
 В сочетании с kitty --session заголовок будет использоваться для всех окон,
 созданных сеансом, которые не устанавливают свои собственные заголовки.";ES;fi;;
 17) S=M17;SC;if [[ $cur == enter ]];then R;echo " -c <CONFIG> --config <CONFIG> Укажите путь к используемым файлам конфигурации.
 Все файлы конфигурации объединяются во встроенный файл kitty.conf,
 переопределяя встроенные значения.
 Эту опцию можно указать несколько раз, чтобы последовательно прочитать несколько
 файлов конфигурации, которые будут объединены.
 Используйте специальное значение NONE, чтобы не загружать файл конфигурации.
 Если эта опция не указана, файлы конфигурации ищутся в следующем порядке:
 \$XDG_CONFIG_HOME/kitty/kitty.conf
 ~/.config/kitty/kitty.conf
 \$XDG_CONFIG_DIRS/kitty/kitty.conf
 Первый существующий используется в качестве файла конфигурации.
 Если указана переменная среды KITTY_CONFIG_DIRECTORY,
 этот каталог используется всегда, и описанный выше поиск не выполняется.
 Если файл: /etc/xdg/kitty/kitty.conf существует, он объединяется раньше
 (то есть с более низким приоритетом), чем любые файлы конфигурации.
 Его можно использовать для указания общесистемного значения по умолчанию
 для всех пользователей.";ES;fi;;
 18) S=M18;SC;if [[ $cur == enter ]];then R;echo "--override <OVERRIDE>, -o <OVERRIDE>
 Переопределить отдельные параметры конфигурации, можно указать несколько раз.
 Синтаксис: имя=значение. Например: kitty -o font_size=20";ES;fi;;
 19) S=M19;SC;if [[ $cur == enter ]];then R;echo " -d <DIRECTORY> --directory <DIRECTORY>
 Перейти в указанный каталог при запуске по умолчанию.";ES;fi;;
 20) S=M20;SC;if [[ $cur == enter ]];then R;echo " Отсоедините от управляющего терминала, если таковой имеется";ES;fi;;
 21) S=M21;SC;if [[ $cur == enter ]];then R;echo " --session <SESSION>
 Путь к файлу, содержащему сеанс запуска (вкладки, окна, макет, программы).
 Используйте - для чтения из STDIN. Подробности и пример смотрите в файле README.";ES;fi;;
 22) S=M22;SC;if [[ $cur == enter ]];then R;echo " -w <WATCHER> --watcher <WATCHER>
 Путь к файлу Python.
 Функции с соответствующими именами в этом файле будут вызываться для различных
 событий, таких как изменение размера окна, фокусировка или закрыто.
 См. раздел о наблюдателях в документации по команде запуска.
 Относительные пути разрешаются относительно каталога конфигурации kitty.
 Обратите внимание, что этот наблюдатель будет добавлен только ко всем изначально
 созданным окнам, а не к новым окнам, созданным после запуска.";ES;fi;;
 23) S=M23;SC;if [[ $cur == enter ]];then R;echo " Оставаться открытым после завершения дочернего процесса.
 Обратите внимание, что это влияет только на первое окно.
 Вы можете выйти, используя ярлык закрытия окна или Ctrl + d.";ES;fi;;
 24) S=M24;SC;if [[ $cur == enter ]];then R;echo " Если указано, будет запущен только один экземпляр kitty.
 Новые вызовы вместо этого создадут новое окно верхнего уровня
 в существующем экземпляре котенка.
 Это позволяет kitty совместно использовать один кеш спрайтов
 на графическом процессоре, а также сокращает время запуска.
 Вы также можете иметь отдельные группы экземпляров kitty,
 используя опцию kitty --instance-group";ES;fi;;
 25) S=M25;SC;if [[ $cur == enter ]];then R;echo " --instance-group <INSTANCE_GROUP>
 Используется в сочетании с опцией kitty --single-instance.
 Все вызовы kitty с одним и тем же котенком --instance-group приведут к созданию
 новых окон в первом экземпляре kitty в этой группе.";ES;fi;;
 26) S=M26;SC;if [[ $cur == enter ]];then R;echo " Обычно при использовании --single-instance kitty открывает новое окно
 в существующем экземпляре и немедленно выходит.
 С этой опцией он не закроется, пока не будет закрыто только что открытое окно.
 Обратите внимание, что если предыдущий экземпляр не найден,
 то kitty все равно будет ждать, независимо от этой опции.";ES;fi;;
 27) S=M27;SC;if [[ $cur == enter ]];then R;echo " --listen-on <LISTEN_ON>
 Скажите kitty слушать по указанному адресу контрольные сообщения.
 Например: kitty --listen-on=unix:/tmp/mykitty
 или: kitty --listen-on=tcp:local‐ хост: 12345.
 В системах Linux вы также можете использовать абстрактные сокеты UNIX,
 не связанные с файлом, например: kitty --listen-on=unix:@mykitty.
 Переменные окружающей среды в настройке расширяются, а относительные пути
 разрешаются относительно временного каталога.
 Чтобы управлять kitty, вы можете отправьте ему команды с помощью kitty @,
 используя опцию kitty @ --to чтобы указать этот адрес.
 Эта опция будет игнорироваться, если вы не установите allow_remote_control
 на yes в kitty.conf.
 Обратите внимание, что если вы запускаете kitty @ в окне kitty,
 нет необходимости указывать параметр --to, так как он читается автоматически
 из окружающей среды. Для сокетов UNIX это также можно указать в kitty.conf";ES;fi;;
 28) S=M28;SC;if [[ $cur == enter ]];then R;echo " --start-as <START_AS>
 Контролируйте, как создается начальное окно kitty.
 По умолчанию:
 нормальныe варианты: полноэкранный fullscreen
                      развернутый   maximized
                      свернутый     minimized
                      обычный       normal
";ES;fi;;
 29) S=M29;SC;if [[ $cur == enter ]];then R;echo -e "
 В kitty есть фреймворк для создания подпрограмм, называемых kittens:
\e[32m kitty +kitten icat image.jpeg \e[0m показать изображение в терминале
                                (требуется imagemagick)
\e[32m kitty +kitten diff file1 file2\e[0m показать diff двух файлов
\e[32m kitty +kitten clipboard       \e[0m этот kitten позволяет работать с буфером обмена
                                даже через ssh
";ES;fi;;
#
 30) S=M30;SC;if [[ $cur == enter ]];then R;./mKittyConf.sh;ES;fi;;
 31) S=M31;SC;if [[ $cur == enter ]];then R;echo -e "
 mKitty описание программы терминала. kitty  Эмулятор терминала для художников.
\e[36m
 https://asciinema.org/a/493790
 https://try.gitea.io/Grannik/mKitty
 https://framagit.org/GrannikOleg/mkitty
 https://bitbucket.org/grannikoleg/mkitty
 https://codeberg.org/Grannik/mKitty
 https://notabug.org/Grannikoleg/mKitty
 https://sourceforge.net/projects/mkitty/files/
 https://gitlab.com/grannik/mkitty
 https://github.com/GrannikOleg/mkitty
\e[36m
";ES;fi;;
#
 32) S=M32;SC;if [[ $cur == enter ]];then R;exit 0;fi;;
 esac;POS;done
